aBasic C^v^gp}jA

C^v^WindowsLinuxłقړ悤ɍ쐬Ă܂B
JC++łB


Linux    J     gcc 3.4.4
Windows  J     VisualC++6

Windowsł̃RpC@
basic.dsw@VisualC++6ȏŊJĂ

Linuxł̃RpC@
c++LłȂƃRpCł܂
make R}hsĂ




N@

basic filename

ɃC^v^ŎsvȌꂽeLXgt@CnƂɂsł܂



s̍s
vO͈s̕ftHg1024ȓłKv܂B
܂AϐɊi[\ȍő啶ftHg1024ȓłKv܂B
ύXɂ́A
common.h@́@#define MAX_STR_LEN 1024@ύXKv܂B


vOŎgp\ȕϐ

ϐ^64rbg_^ƕ^܂B
ϐсAϐ^̐錾͕Kv܂B
Ă̕ϐ̓O[oXR[v܂B

ź@data[1]@̂悤Ɏw肵܂B
ź@data[1][2]@̂悤Ɏw肵܂̐͂܂B

ȉ̂悤ɔz̓YƂĕw肷邱Ƃł܂
data["aaa"]=1


Ɛl̉Z

̑Zsꂽꍇ͕񂪘AA
lm̉Zsꂽꍇɂ́Al̉Zʂ߂܂B
lƕ̑ZsꂽꍇɂẮAlƂĈAĘA܂B

vO
print 1+1
print 1+"test"
print "test"+1
print "test"+"test"

s
$ ./basic test.txt
2
1test
test1
testtest


vOŎgp\Ȗ

Rg

'Rg

'Ŏn܂镶̓RgƂĈ܂




if  then ߂P else ߂Q

̌ʂ0̏ꍇ͖߂QsAȊOɂ͖߂Ps܂
j߂PA߂Q@̉ӏ if  eval ߂͋Lqł܂B

Eɂ͈ȉ̂̂gpł܂

=	CR[
<	ȂȂ
>	Ȃ菬Ȃ
<=	ȂȂCR[
>=	Ȃ菬ȂCR[
&&	Ah
||	IA
<>	mbgCR[


ẼTv
if 1=1 then print "true" else print "false"
if "test"="test" then print "true" else print "false"
if 1<1 then print "true" else print "false"
if 1>1 then print "true" else print "false"
if 1<=1 then print "true" else print "false"
if 1>=1 then print "true" else print "false"
if 1=1 && 2=1 then print "true" else print "false"
if 1=1 || 2=1 then print "true" else print "false"
if "test"<>"aaaa" then print "true" else print "false"


[v

for x=1 to 10
print x
next x

x1`10܂Ń[v܂
for̃lXg\ł


Wv

goto label

label

gotoɂ胉xɃWv܂
x͖߂ƂėpĂȂłΐ͂܂


Tu[`i֐j

gosub label

label
return

gosub߂ɂw肳ꂽxɃWvAreturn߂ɂAWvɕA܂
KAxreturn͈΂łKv܂B
Tu[`̃lXg\ł


Tu[`̃[Jϐ

    x ϐ1
        
        ̒ł ϐ1 [JϐɂȂ܂
        ֐ł̃XR[vĂAꖼ̕ϐƂĂO[oϐ̉e͎󂯂܂񂵁Ae܂B
        
    return

͌ĂяoɒlnAnȂɊ֌WȂRɎwł܂B
̓J}ŋ؂邱Ƃɂ32܂Ŏwł܂B
ϐȂƑOȂ疳łB

label a,b,c,d,e,f,g

Lła,b,c,d,e,f,g̃[Jϐw肵Ă܂B


[JϐɒlnČĂяo

gosub label a

labelɑ΂ĕϐ a ̒lnČĂяoĂ܂B
̒lnꍇɂ̓J}ŋ؂Ďw肵܂

gosub label a,b,1+1,d+1

Lł a,b,1+1,d+1 ̒ln܂B


vO

a="hello"
gosub test 0
print a
end

test a
	print a
	if a<5 then gosub test a+1
	print a
return

s

$ ./basic ./sample/test.txt
0
1
2
3
4
5
5
4
3
2
1
0
hello


͖

input ϐ

͂vĂ܂A͌ʂϐɊi[܂


o͖

print ""
print ϐ

lʏɏo͂܂


GXP[vV[PX
GXP[vV[PXΉ̒[̂ݑΉ܂

clr
location 1,1

clr߂ɂʂNA܂
location߂ɂJ[\ʂ̎wWɈړ܂


ҋ@

wait

̖߂ƁA1bԃvO~܂


abs

abs ϐ

ϐɊi[ĂĺA_ȉ؂̂ĂāA
absƂϐɌʂi[܂B


shell

shell "notepad test.txt"

w肵vOs܂
svOI܂őҋ@܂


I

end

̖߂ǂݍ܂ꂽ_ŃvOI܂


vOŎgp\Ȋϐ

͏o܂AQƂ݂̂łB
ʏ̕ϐ̂悤ɓǂݏo܂B


擾ł闐ĺ@0`9999@͈̔͂ł

rand



time.year	N
time.mon	
time.day	
time.week	j0Aj1Ƃj킷l
time.hour	
time.min	
time.sec	b

\G[
vOsɍ\G[ꍇA
ԍŌɋNG[̍sio[ۑ܂B
G[̔s͎񂩂sXLbv邱Ƃ܂B

system.err.line		ԍŌɔG[sio[

GXP[v

\Ŏn܂鎟̓̕GXP[v܂
\n@͉s\A
\"@"\܂B
\\@\\܂B


񑀍얽
̒𒲂ׂ

len 

ϐ len ɕ̒i[܂
L̏ꍇ 7 łB

a="abcdefg"
len a
print len


̐؂o mid

mid ,؏oJnʒu,؏o

ϐ mid ɐ؂oꂽ񂪊i[܂
؏oJnʒúA̐擪̈ʒułB
L̏ꍇł̌ʂ bcde łB

a="abcdefg"
mid a,1,4
print mid


񂩂lւ̕ϊ val

val ϐ

ϐ̕񂪒lɂȂ܂B
ϊłȂꍇɂ 0 ɂȂ܂B

l當ւ̕ϊ str

str ϐ

CSV`̐؏o

csv ϐ

؏oʂ́Aϐ[1]`@ɑ܂B
؏oʂ̖́@ϐ[N]ɂ "," ܂B

vO

aaa="\"aaa\",001,\"002\",ddd"
print aaa

csv aaa	'csv̐؏o

loop1
	i=i+1
	print aaa[i]
if ","<>aaa[i] then goto loop1 '؏o̖܂Ń[v

s

$ ./basic test.txt
"aaa",001,"002",ddd
aaa
001
002
ddd
,


Œ蒷̐؏o

chop ϐ,؏oz

؏oʂ́Aϐ[1]`@ɑ܂B
؏oʂ̖́@ϐ[N]ɂ "," ܂B

؏ozɂ́A
ϐ[1]`@ɐ؂oĂB


vO

ar="5,4,3" '5@4@3@cS ɐ؂o܂
csv ar 'csv߂𗘗pz쐬܂B
data="abcdefghijklmnopqrstuvwxyz"

chop data,ar

loop
	i=i+1
	str=data[i]
	print str
if str<>"," then goto loop '؏o̖܂Ń[v


s

$ ./basic test.txt
abcde
fghi
jkl
mnopqrstuvwxyz
,


trim

̑ÕXy[X菜܂B
ʂ͓nϐɊi[܂B

trim ϐ


eval
̖߂s܂
1sŊ閽߂̂ݎs\ł
gotogosub͎s\łA߂sɓnfor - nextȂǂ͎sł܂B

eval "print \"test\""



a="print \"test\""
eval a

Lł print "test" ̈sƓłB



